package com.udima.reglocation;

import java.util.List;

import android.os.Bundle;
import android.text.Editable;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.udima.reglocation.entities.Track;
import com.udima.reglocation.util.SQLiteDatabaseHandler;

/**
 * Clase que permite al usuario visualizar cualquier trayecto de los que están almacenados en el servidor. La información
 * se obtiene con una llamada asíncrona que puede ser de dos maneras:
 *    -Sin parámtros de fecha:			   El servidor devuelve la última ruta almacenada
 *    -Conparámetros (fecha inicio - fin): El servidor proporciona un listado de rutas almacenadas en las fechas
 *                                         que cumplen las condiciones del filtrado permitiendo seleccionar una para
 *                                         su posterior visualización en el mapa de Google.
 * 
 * Esta pantalla dispone de un mapa como elemento visual para representar el recorrido que se consulta 
 * 
 * @author luis
 *
 */

public class ListTrackActivity extends android.support.v4.app.FragmentActivity {

    private Button btnList;
    private EditText inputTracks; 
    private SQLiteDatabaseHandler db;
    
    // Instancia al mapa de Google
    private GoogleMap googleMap;

    /**
     * Evento que se lanza en la creación de la clase. Genera el mapa y posiciona todos los puntos del
     * recorrido que se obtiene del servidor
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list_track_activity);      
        db = new SQLiteDatabaseHandler(this);
        
        try {
            // Carga del mapa
            initilizeMap();
        } catch (Exception e) {
            e.printStackTrace();
        }

        inputTracks = (EditText) findViewById(R.id.txtEmail);
        btnList = (Button) findViewById(R.id.btnList);
        
        btnList.setOnClickListener(new View.OnClickListener() {
 
        	/**
        	 * Función listener del botón de obtención de datos 
        	 */
            public void onClick(View view) {
            	Editable aux;
            	Double lastLatitude  = (double) 0;
            	Double lastLongitude = (double) 0;
            	
            	//Lista de todos los puntos del recorrido que se va a representar
            	List <Track> tracks = db.getAllTracks();
            	
            	//Bucle para el manejo de cada una de las posiciones
            	for(Track tr : tracks) {
            		aux = inputTracks.getText();
            		inputTracks.setText("");
            		inputTracks.setText(aux  
            				 + tr.getLatitude().toString() + '-'
            				 + tr.getLongitude().toString() + '-'
            				 + tr.getAltitude().toString() + '-'
            				 + tr.getSpeed().toString() + '-'
            				 + tr.getTime()
            				 +'\n');
            		 
            		// Creación del marcador
            		MarkerOptions marker = new MarkerOptions().position(new LatLng(tr.getLatitude(), tr.getLongitude())).title("Hello Maps ");
            		 
            		// Se añade el marcador
            		googleMap.addMarker(marker);
            		
            		//Almacenaje de la última latitud y longitud obtenida
            		lastLatitude  = tr.getLatitude();
            		lastLongitude = tr.getLongitude();

            	}
            	
        		// Se posiciona el mapa el el último punto que se ha localizado en la lista de datos
                googleMap.moveCamera(CameraUpdateFactory.newLatLng(new LatLng(lastLatitude, lastLongitude)));
 
                // Se fija el nivel de zoom de manera proporcional a la cantidad de recorrido que se quiere mostrar
                googleMap.animateCamera(CameraUpdateFactory.zoomTo(14));
                
            }
        });
        
    }
    
    /**
     * Funciona para cargar el mapa
     * */
	private void initilizeMap() {
        if (googleMap == null) {
            googleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
 
            // Comprueba si el mapa se ha creado satisfactoriamente
            if (googleMap == null) {
                Toast.makeText(getApplicationContext(),"Error! no se puede cargar el mapa", Toast.LENGTH_SHORT).show();
            }
        }
    }
 
    @Override
    protected void onResume() {
        super.onResume();
        initilizeMap();
    }
 
}